// 认证服务，用于管理用户登录状态和会员功能

class AuthService {
  constructor() {
    // 初始化用户状态
    this.user = this.getUserFromLocalStorage();
  }

  // 从本地存储获取用户信息
  getUserFromLocalStorage() {
    const userData = localStorage.getItem('user');
    return userData ? JSON.parse(userData) : null;
  }

  // 将用户信息保存到本地存储
  saveUserToLocalStorage(user) {
    localStorage.setItem('user', JSON.stringify(user));
    this.user = user;
  }

  // 移除本地存储中的用户信息
  removeUserFromLocalStorage() {
    localStorage.removeItem('user');
    this.user = null;
  }

  // 登录方法
  login(username, password) {
    // 这里是模拟登录验证，实际项目中应该调用API
    if (username && password) {
      // 模拟从数据库获取用户信息
      const user = {
        id: Math.floor(Math.random() * 1000),
        username,
        name: `用户${username}`,
        avatar: 'https://picsum.photos/id/64/200/200',
        role: 'user',
        // 会员相关信息
        coins: 100, // 初始金币数量
        membership: {
          level: 1,
          points: 0,
          createdAt: new Date().toISOString()
        },
        // 用户拥有的宠物用品
        inventory: []
      };
      
      this.saveUserToLocalStorage(user);
      return Promise.resolve(user);
    }
    return Promise.reject(new Error('用户名和密码不能为空'));
  }

  // 退出登录方法
  logout() {
    this.removeUserFromLocalStorage();
  }

  // 获取当前登录用户
  getCurrentUser() {
    return this.user;
  }

  // 检查用户是否已登录
  isAuthenticated() {
    return !!this.user;
  }
  
  // 会员金币相关功能
  
  // 获取用户金币数量
  getUserCoins() {
    return this.user?.coins || 0;
  }
  
  // 增加用户金币
  addCoins(amount) {
    if (!this.user) {
      return Promise.reject(new Error('用户未登录'));
    }
    
    this.user.coins = (this.user.coins || 0) + amount;
    this.saveUserToLocalStorage(this.user);
    return Promise.resolve(this.user.coins);
  }
  
  // 减少用户金币
  spendCoins(amount) {
    if (!this.user) {
      return Promise.reject(new Error('用户未登录'));
    }
    
    if ((this.user.coins || 0) < amount) {
      return Promise.reject(new Error('金币不足'));
    }
    
    this.user.coins -= amount;
    this.saveUserToLocalStorage(this.user);
    return Promise.resolve(this.user.coins);
  }
  
  // 获取用户物品库存
  getUserInventory() {
    return this.user?.inventory || [];
  }
  
  // 添加物品到用户库存
  addItemToInventory(item) {
    if (!this.user) {
      return Promise.reject(new Error('用户未登录'));
    }
    
    this.user.inventory = this.user.inventory || [];
    this.user.inventory.push(item);
    this.saveUserToLocalStorage(this.user);
    return Promise.resolve(this.user.inventory);
  }
  
  // 购买宠物用品
  buyPetSupply(supply) {
    if (!this.user) {
      return Promise.reject(new Error('用户未登录'));
    }
    
    if (!supply.price || (this.user.coins || 0) < supply.price) {
      return Promise.reject(new Error('金币不足，无法购买'));
    }
    
    // 扣除金币
    this.user.coins -= supply.price;
    
    // 添加物品到库存
    this.user.inventory = this.user.inventory || [];
    
    // 检查是否已经拥有该物品
    const existingItemIndex = this.user.inventory.findIndex(item => item.id === supply.id);
    if (existingItemIndex >= 0) {
      // 增加数量
      this.user.inventory[existingItemIndex].quantity = (this.user.inventory[existingItemIndex].quantity || 1) + 1;
    } else {
      // 添加新物品
      this.user.inventory.push({
        ...supply,
        quantity: 1,
        purchasedAt: new Date().toISOString()
      });
    }
    
    this.saveUserToLocalStorage(this.user);
    return Promise.resolve({
      success: true,
      remainingCoins: this.user.coins,
      item: this.user.inventory.find(item => item.id === supply.id)
    });
  }
}

export default new AuthService();